package tech.yunjing.train.dao;


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import tech.yunjing.train.entity.RedPacket;

import java.util.Date;
import java.util.List;

/**
 * 该类继承JpaRepository接口定义红包中的方法
 * Created by 刘飞 on 2017-6-7.
 *
 */
@Repository
public interface RedPacketDao extends JpaRepository<RedPacket,Integer> {
    /**
     *
     * @param redPacketName      红包名
     * @param smallPacketNumber 小红包数量
     * @param redPacketamount   红包金额
     * @param createDate        红包创建时间
     * @param updateDate        红包修改时间
     * @param stopDate          红包停止时间
     * @param userAccount       红包对应账号
     * @param logic_delete      红包状态
     * @return                   1 增加成功 0增加失败
     */
    @Modifying
    @Query(value = "insert into red_packet" +
            " (red_packet_name,small_packet_number,red_packet_amount,create_date,update_date,stop_date,user_account,logic_delete)" +
            "VALUES(?1,?2,?3,?4,?5,?6,?7,?8)"
            ,nativeQuery = true)
    int  addRedpacket(String redPacketName, int smallPacketNumber, double redPacketamount, Date createDate, Date updateDate, Date stopDate, String userAccount, int logic_delete);

    /**
     *   根据红包名称 红包状态 红包账户信息查找红包
     *   修改小红包数量 修改时间 停止时间 红包金额
      * @param smallPacketNumber 小红包的数量
     * @param redpacketAmount     红包的金额
     * @param updateDate          修改时间
     * @param stopDate            停止时间
     * @param redPacketName       红包名称
     * @return
     */
    @Modifying
    @Query(value = "update RedPacket set smallPacketNumber=?1,redPacketAmount=?2,updateDate=?3,stopDate=?4 where redPacketName=?5 and userAccount=?6 and logicDelete=?7 ")
    int updateNumberAndAmount(int smallPacketNumber, double redpacketAmount, Date updateDate, Date stopDate, String redPacketName, String userAccount, String logicDelete);

    /**
     * 根据红包开始状态 红包名称和用户账户查找红包并修改红包
     * @param logicDelete 红包状态
     * @param updateDate  红包修改时间
     * @param redPacketName  红包名称
     * @param userAccount     用户账户
     * @param logicDeleteStart  红包开始状态
     * @param stopDate           红包停止时间
     * @return
     */
    @Modifying
    @Query(value = "update RedPacket set logicDelete=?1,updateDate=?2,stopDate=?6 where redPacketName=?3 and userAccount=?4 and logicDelete=?5" )
    int removeRedPacket(String logicDelete, Date updateDate, String redPacketName, String userAccount, String logicDeleteStart, Date stopDate);

    /**
     *
     * @param logicDelete 根据红包状态查询所有红包
     * @return        所有红包的集合
     */
    List<RedPacket> findAllByLogicDelete(String logicDelete);

    /**
     * 根据红包状态 红包名称和用户账户查找红包
     * @param redPacketName
     * @param logicDelete
     * @param userAccount
     * @return
     */
    RedPacket findByRedPacketNameAndLogicDeleteAndUserAccount(String redPacketName, String logicDelete, String userAccount);


    List<RedPacket> findAllByUserAccount(String userAccount);

}
